/*
* 如何定义一个 SetOptional 工具类型，支持把给定的 keys 对应的属性变成可选的
* */
type Foo = {
	a: number,
	b?: string,
	c: boolean
}

// 我要这么调用
type SomeOptional = SetOptional<Foo, 'a' | 'b'>
// 生成的类型应该是这样的
// type SomeOptional = {
// 	a?: number,
// 	b?: string,
// 	c: boolean
// }

// 接下来我们来实现 SetOptional
type SetOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>


// 测试
const data: SomeOptional = {
	// a: 1,
	// b: '2',
	c: true
}
